package com.sinoeyes.system.service.impl;

import java.util.List;

import com.sinoeyes.common.constant.UserConstants;
import com.sinoeyes.common.core.page.RestPageResult;
import com.sinoeyes.common.utils.StringUtils;
import com.sinoeyes.common.vo.BaseVo;
import com.sinoeyes.system.filter.SysConfigFilter;
import com.sinoeyes.system.mapper.SysConfigMapper;
import com.sinoeyes.system.po.SysConfigPo;
import com.sinoeyes.system.service.ISysConfigService;
import com.sinoeyes.system.vo.SysConfigVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 参数配置 服务层实现
 * 
 * @author ruoyi
 */
@Service
public class SysConfigServiceImpl implements ISysConfigService
{
    @Autowired
    private SysConfigMapper configMapper;

    /**
     * 查询参数配置信息
     * 
     * @param configId 参数配置ID
     * @return 参数配置信息
     */
    @Override
    public SysConfigVo selectConfigById(Long configId) {
        return BaseVo.copyPo2Vo(configMapper.selectConfigById(configId), SysConfigVo.class);
    }

    /**
     * 根据键名查询参数配置信息
     * 
     * @param configKey 参数key
     * @return 参数键值
     */
    @Override
    public String selectConfigByKey(String configKey)
    {

        SysConfigPo retConfig = configMapper.selectConfigByKey(configKey);
        return StringUtils.isNotNull(retConfig) ? retConfig.getConfigValue() : "";
    }

    /**
     * 查询参数配置列表
     * 
     * @param filter 参数配置信息
     * @return 参数配置集合
     */
    @Override
    public RestPageResult<SysConfigVo> selectConfigList(SysConfigFilter filter) {
        filter.startPage();
        List<SysConfigPo> sysConfigPos = configMapper.selectConfigList(filter);
        RestPageResult pageResult = filter.getPageResult(sysConfigPos);
        return BaseVo.copyPo2Vo(pageResult, SysConfigVo.class);

    }

    /**
     * 新增参数配置
     * 
     * @param sysConfigVo 参数配置信息
     * @return 结果
     */
    @Override
    public int insertConfig(SysConfigVo sysConfigVo)
    {
        return configMapper.insertConfig(BaseVo.copyVo2Po(sysConfigVo, SysConfigPo.class));
    }

    /**
     * 修改参数配置
     * 
     * @param sysConfigVo 参数配置信息
     * @return 结果
     */
    @Override
    public int updateConfig(SysConfigVo sysConfigVo)
    {
        return configMapper.updateConfig(BaseVo.copyVo2Po(sysConfigVo, SysConfigPo.class));
    }

    /**
     * 删除参数配置信息
     * 
     * @param configId 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteConfigById(Long configId)
    {
        return configMapper.deleteConfigById(configId);
    }

    /**
     * 校验参数键名是否唯一
     * 
     * @param config 参数配置信息
     * @return 结果
     */
    @Override
    public String checkConfigKeyUnique(SysConfigVo config)
    {
        Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
        SysConfigPo info = configMapper.checkConfigKeyUnique(config.getConfigKey());
        if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }
}
